// Set集合
// 集合形式的集合引用类型，实现集合数据结构

// 1.创建=>构造函数，参数为可迭代的对象，对象包含插入集合的元素，按顺序创建集合
const set=new Set([1,2,3,"4",{}]);
// 集合内的元素可以为任意数据类型

// 2.方法与属性
set.size
// 集合内元素的数量
set.add({name:"a"});
// 参数为插入集合的元素，向集合中插入新元素，返回插入后的集合
set.delete(1);
// 参数为集合内的元素，删除集合内的该元素，返回值为布尔值，代表删除的成功与否
set.clear();
// 清除集合内的所有元素
set.has("4");
// 参数为集合内的元素，查找集合内是否存在该元素，返回值为布尔值
set.get(3);
// 参数为集合内的元素，查找集合内是否存在该元素，存在则返回该元素，否则返回undefined


// 3.顺序与迭代
// 集合内元素按顺序插入，可以按顺序进行迭代,返回的迭代器可以用for-of进行遍历
set.values();
set.keys();
set[Symbol.iterator];
// 返回集合内元素的迭代器
set.entries();
// 返回集合元素值对的迭代器，即用for-of遍历，为[value,value]形式的数组

set.forEach(func,thisvalue);
// 利用回调的形式进行迭代，第一个参数为回调函数，函数参数为集合元素，第二个参数为回调函数中this的值

// 4.使用
// Set实现集合数据结构类型，在基本API基础上进行差集，并集，交集，幂集等多种集合操作自定义实现


// WeakSet 弱集合
// 为Set集合的子集，具有Set的方法属性(迭代和clear没有)
// 类似于WeakMap的特点，弱体现为垃圾回收
// 一般用于为Dom节点进行标签操作而创建弱集合